home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / ZSI / digest_auth.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  3KB  |  95 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import re
  5. from md5 import md5
  6. import random
  7. import time
  8. import httplib
  9. random.seed(int(time.time() * 10))
  10.  
  11. def H(val):
  12.     return md5(val).hexdigest()
  13.  
  14.  
  15. def KD(secret, data):
  16.     return H('%s:%s' % (secret, data))
  17.  
  18.  
  19. def A1(username, realm, passwd, nonce = None, cnonce = None):
  20.     if nonce and cnonce:
  21.         return '%s:%s:%s:%s:%s' % (username, realm, passwd, nonce, cnonce)
  22.     else:
  23.         return '%s:%s:%s' % (username, realm, passwd)
  24.  
  25.  
  26. def A2(method, uri):
  27.     return '%s:%s' % (method, uri)
  28.  
  29.  
  30. def dict_fetch(d, k, defval = None):
  31.     if d.has_key(k):
  32.         return d[k]
  33.     
  34.     return defval
  35.  
  36.  
  37. def generate_response(chaldict, uri, username, passwd, method = 'GET', cnonce = None):
  38.     authdict = { }
  39.     qop = dict_fetch(chaldict, 'qop')
  40.     domain = dict_fetch(chaldict, 'domain')
  41.     nonce = dict_fetch(chaldict, 'nonce')
  42.     stale = dict_fetch(chaldict, 'stale')
  43.     algorithm = dict_fetch(chaldict, 'algorithm', 'MD5')
  44.     realm = dict_fetch(chaldict, 'realm', 'MD5')
  45.     opaque = dict_fetch(chaldict, 'opaque')
  46.     nc = '00000001'
  47.     if not cnonce:
  48.         cnonce = H(str(random.randint(0, 10000000)))[:16]
  49.     
  50.     if algorithm.lower() == 'md5-sess':
  51.         a1 = A1(username, realm, passwd, nonce, cnonce)
  52.     else:
  53.         a1 = A1(username, realm, passwd)
  54.     a2 = A2(method, uri)
  55.     secret = H(a1)
  56.     data = '%s:%s:%s:%s:%s' % (nonce, nc, cnonce, qop, H(a2))
  57.     authdict['username'] = '"%s"' % username
  58.     authdict['realm'] = '"%s"' % realm
  59.     authdict['nonce'] = '"%s"' % nonce
  60.     authdict['uri'] = '"%s"' % uri
  61.     authdict['response'] = '"%s"' % KD(secret, data)
  62.     authdict['qop'] = '"%s"' % qop
  63.     authdict['nc'] = nc
  64.     authdict['cnonce'] = '"%s"' % cnonce
  65.     return authdict
  66.  
  67.  
  68. def fetch_challenge(http_header):
  69.     m = fetch_challenge.wwwauth_header_re.match(http_header)
  70.     if m is None:
  71.         raise RuntimeError, 'expecting "WWW-Authenticate header [Basic,Digest]"'
  72.     
  73.     d = dict(challenge = m.groups()[0])
  74.     m = fetch_challenge.auth_param_re.search(http_header)
  75.     while m is not None:
  76.         (k, v) = http_header[m.start():m.end()].split('=')
  77.         d[k.lower()] = v[1:-1]
  78.         m = fetch_challenge.auth_param_re.search(http_header, m.end())
  79.     return d
  80.  
  81. fetch_challenge.wwwauth_header_re = re.compile('\\s*([bB]asic|[dD]igest)\\s+(?:[\\w]+="[^"]+",?\\s*)?')
  82. fetch_challenge.auth_param_re = re.compile('[\\w]+="[^"]+"')
  83.  
  84. def build_authorization_arg(authdict):
  85.     vallist = []
  86.     for k in authdict.keys():
  87.         vallist += [
  88.             '%s=%s' % (k, authdict[k])]
  89.     
  90.     return 'Digest ' + ', '.join(vallist)
  91.  
  92. if __name__ == '__main__':
  93.     print _copyright
  94.  
  95.